package com.study.d012Components;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

/**
 * TabPane 和 Tab  选项卡      第30课
 *
 * @author Administrator
 *
 */
public class TabPaneMain extends Application{
	public static void main(String[] args) {
		launch(args);
	}

	@Override
	public void start(Stage stage) throws Exception {
		TabPane tp  =new TabPane();
		Tab tab1 =new Tab("测试1");
		Tab tab2 =new Tab("测试2");
		Tab tab3 =new Tab("测试3");

		tp.getTabs().addAll(tab1,tab2,tab3);


		//设置tab的停靠方向  默认为Side.TOP  ,如果设置Tab停靠位置为Side.RIGHT,则需要将这两行代码放置在show()方法之前，否认设置的图标不会自动旋转过来
		tp.setSide(Side.RIGHT);
		tp.setRotateGraphic(true);


		//Tab设置图标
		ImageView imgv = new ImageView(new Image("icon/01.jpg", 15, 15, true, true));
		tab1.setGraphic(imgv);

		stage.show();
		BorderPane bPane = new BorderPane();
		bPane.setCenter(tp);
		stage.setScene(new Scene(bPane));
		stage.setWidth(500);
		stage.setHeight(400);

		/**
		 * 设置Tab的关闭策略
		 * 		--TabClosingPolicy.UNAVAILABLE ： 都不允许关闭
		 *		--TabClosingPolicy.SELECTED_TAB: 允许选中后关闭
		 *		--TabClosingPolicy.ALL_TABS    ：所有Tab都默认自带关闭图标   默认
		 */
		//tp.setTabClosingPolicy(TabClosingPolicy.ALL_TABS);

		//设置tab1不允许关闭
		//tab1.setClosable(false);

		//设置默认展现的tab
		//tp.getSelectionModel().select(1);    tp.getSelectionModel().select(tab2);

		//TabPane的点击选择事件
		tp.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>() {
			@Override
			public void changed(ObservableValue<? extends Tab> observable, Tab oldValue, Tab newValue) {
					System.out.println(newValue.getText());
			}
		});


		//Tab是否选中事件
		tab1.setOnSelectionChanged(new EventHandler<Event>() {

			@Override
			public void handle(Event event) {
				Tab tab =  (Tab)event.getSource();
				System.out.println("tab1 是否被选中 "+tab.isSelected());

			}
		});



		//注意 setOnClosed() 和 setOnCloseRequest()的区别以及事件传递   先执行setOnCloseRequest() 再执行 setOnClosed()
		tab1.setOnCloseRequest(new EventHandler<Event>() {

			@Override
			public void handle(Event event) {
				Tab t = (Tab)event.getSource();
				System.out.println("setOnCloseRequest()---->text="+t.getText() + "-------id=" + t.getId());
				//阻止事件传递
				event.consume();
			}
		});

		tab1.setOnClosed(new EventHandler<Event>() {
			@Override
			public void handle(Event event) {
				Tab t = (Tab)event.getSource();
				System.out.println("setOnClosed()---->text="+t.getText() + "-------id=" + t.getId());


			}
		});
	}
}
